/**
 * @file 24AA256.h
 *
 * Definicion y Funciones de la Eeprom 24AA256
 *
 * @version  1.00a
 * @date     14/5/2014
 * @author   Pirx
 *
 */

#ifndef __24AA256_H_
#define __24AA256_H_

/***************************** Include Files *********************************/

#include <GenericTypeDefs.h>
#include "I2C_lib.h"

/************************** Constant Definitions *****************************/

#define		E24AA_1		0

/**************************** Type Definitions *******************************/

// Comandos de Respuesta y de Estado
typedef enum {
	eInit = 0,						// Memoria sin iniciar
	eIdle,							// E2prom en standby
	eBusy,							// E2prom procesando datos
	eRdDone,						// Operacion de Lectura completada
	eWrDone,						// Operacion de Escritura completada		!!! No se Usa ....???????
	eError,							// Error en la transaccion
	eAck,							// Comando aceptado
	eFull,							// Comando rechazado -> Buffer Lleno
} E_24AAcmd;

// Estructura del comando de respuesta
typedef union{
	UINT16		hex;
	struct{
		UINT16	id:12;				// Id
		UINT16	cmd:4;				// Comando
	}bit;
}DefE24Resp;


/************************** Function Prototypes ******************************/

extern void E24aaInit(UINT8 dev, UINT8 a012, UINT8 ena);					// Inicializacion
extern UINT8 E24aaTimer(UINT8 dev);											// Control de Timers
extern UINT8 E24aaPrep(UINT8 dev, StrI2C* i2c);								// Prepara Comunicaciones
extern UINT8 E24aaProc(UINT8 dev, StrI2C* i2c);								// Procesa Comunicaciones

extern DefE24Resp GetStatE24(UINT8 dev);									// Obtiene el Estado de la E2prom
extern DefE24Resp ReadDatE24(UINT8 dev, UINT16 adr, UINT8 ndat);			// Inicia la lectura de N bytes de la E2prom
extern UINT8* GetDatE24(UINT8 dev);											// Obtiene los datos de una lectura Finalizada
extern DefE24Resp WriteDatE24(UINT8 dev, UINT16 adr, UINT8* dat, UINT8 nd);	// Escribe N Bytes en la Eeprom
extern BOOL GetBusy(UINT8 dev);												// Obtener si hay actividad pendiente

#endif